#include <iostream>
#include <type_traits>
#include <string>
#include <iostream>
#include <typeinfo>

int main() 
{
    int x;
    int& y = x;
    int&& z = std::move(x);
    auto&& f = []{};

    // 加括号是表达式，是左值

    std::cout << typeid((x)).name() << std::endl;

    std::cout << std::is_reference<decltype(x)>::value << std::endl
              << std::is_reference<decltype((x))>::value << std::endl
              << std::is_reference<decltype(y)>::value << std::endl
              << std::is_reference<decltype((y))>::value << std::endl
              << std::is_reference<decltype(z)>::value << std::endl
              << std::is_reference<decltype((z))>::value << std::endl
              << std::is_reference<decltype(f)>::value << std::endl
              << std::is_reference<decltype((f))>::value << std::endl;
    
    std::cout << "-------------" << std::endl;

    std::cout << std::is_rvalue_reference<decltype(x)>::value << std::endl
              << std::is_rvalue_reference<decltype((x))>::value << std::endl
              << std::is_rvalue_reference<decltype(y)>::value << std::endl
              << std::is_rvalue_reference<decltype((y))>::value << std::endl
              << std::is_rvalue_reference<decltype(z)>::value << std::endl
              << std::is_rvalue_reference<decltype((z))>::value << std::endl
              << std::is_rvalue_reference<decltype(f)>::value << std::endl
              << std::is_rvalue_reference<decltype((f))>::value << std::endl;
}
